import java.util.*;

public class day6 {
    /**
     * 滚动数组优化
     */
    static int[] dp1;
    public int knapsack2 (int V, int n, int[][] vw) {
        // 01背包就是 -> 选或不选
        // 动态规划
        // dp[i][j]: 表示当到达i位置之后，从0~i进行选择，总体积不超过j的情况下，最大的重量的值
        dp1 = new int[V + 1];
        for(int i = 1;i <= n;i++) {
            for(int j = V;j >= vw[i - 1][0];j--) {
                dp1[j] = Math.max(dp1[j],dp1[j - vw[i - 1][0]] + vw[i - 1][1]);
            }
        }
        return dp1[V];
    }

    /**
     * 动态规划
     * NC145 01背包
     * https://www.nowcoder.com/practice/2820ea076d144b30806e72de5e5d4bbf?tpId=196&tqId=37561&ru=/exam/oj
     */
    static int[][] dp;
    public int knapsack (int V, int n, int[][] vw) {
        // 01背包就是 -> 选或不选
        // 动态规划
        // dp[i][j]: 表示当到达i位置之后，从0~i进行选择，总体积不超过j的情况下，最大的重量的值
        dp = new int[n + 1][V + 1];
        for(int i = 1;i <= n;i++) {
            for(int j = 0;j <= V;j++) {
                // 不选
                dp[i][j] = dp[i - 1][j];
                // 选，需要符合条件才可
                if(j >= vw[i - 1][0]) {
                    dp[i][j] = Math.max(dp[i][j],dp[i - 1][j - vw[i - 1][0]] + vw[i - 1][1]);
                }
            }
        }
        return dp[n][V];
    }


    /**
     * Top-K 问题
     * chika和蜜柑
     * https://ac.nowcoder.com/acm/problem/26221
     */
    public static void main2(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = in.nextInt();
        int[][] arr = new int[n][2];
        for(int i = 0;i < n;i++) {
            // 酸度
            arr[i][0] = in.nextInt();
        }
        for(int i = 0;i < n;i++) {
            // 甜度
            arr[i][1] = in.nextInt();
        }
        long sumB = 0; // 甜度之和
        long sumA = 0; // 酸度之和

        // 设置比较器
        PriorityQueue<int[]> queue = new PriorityQueue<>((v1,v2) -> {
            if(v1[1] == v2[1]) {
                // 甜度相等，酸度按照 升序排序
                return v1[0] - v2[0];
            }else {
                // 甜度不等，按照降序排序
                return v2[1] - v1[1];
            }
        });
        // 把arr按照每一行进行放入，行中存放的就是一组对应的 甜度和酸度
        for(int i = 0;i < n;i++) {
            queue.add(arr[i]);
        }
        // 取前 k 个数进行计算
        while(k-- != 0) {
            int[] t = queue.poll();
            sumA += t[0]; // 酸度
            sumB += t[1]; // 甜度
        }
        System.out.println(sumA + " " + sumB);
    }


    /**
     * 双指针
     * NC101 压缩字符串(一)
     * https://www.nowcoder.com/practice/c43a0d72d29941c1b65c857d8ac9047e?tpId=196&tqId=39317&ru=/exam/oj
     */
    public String compressString (String param) {
        // 使用双指针遍历一遍
        char[] str = param.toCharArray();
        StringBuffer ret = new StringBuffer();
        int n = str.length;
        int left = 0,right = 0;
        while(left < n) {
            while(right + 1 < n && str[right + 1] == str[right]) {
                // 找到相同并且紧挨的字符区间的长度，right指向这个区间的最后一个位置
                right++;
            }
            // 先把这个字符添加到 ret 中
            ret.append(str[left]);
            // 判断这个字符的长度是否超过1
            if(right - left + 1 > 1) {
                ret.append(right - left + 1);
            }
            left = right + 1;
            right = left;
        }
        return ret.toString();
    }
}
